<?php
require_once("model/data.php");

require_once("model/image.php");
require_once("model/imageDAO.php");
	
	/**
	 * Classe du controleur PhotoMatrix
	 */
	class PhotoMatrix {
		
		protected $imageDAO;
		protected $minSize =100;
		protected $maxSize =2000;
		protected $data;
		
		function __construct() {
			// Ouvre le blog
			$this->imageDAO = new ImageDAO();

		}
		
		/** 
		 * Recupere les parametres de manière globale
		 * Pour toutes les actions de ce contrôleur
		 */
		protected function getParam() {
			// Recupère un éventuel no de départ			
			global $imgId,$size,$nbImg,$categorie,$data;
			if (isset($_GET["imgId"]) && $_GET["imgId"]!="" && $_GET["imgId"]>0) {
				$imgId = $_GET["imgId"];
			} else {
				$imgId = 1;
			}
			// Recupere le mode delete de l'interface
			if (isset($_GET["size"]) && $_GET["size"]!="") {
				$size = $_GET["size"];
				if($size>=$this->maxSize ){
					$size =$this->maxSize;
				}else if($size<=$this->minSize){
					$size =$this->minSize;
				}
			} else {
				# sinon place une valeur de taille par défaut
				$size = 480;
			}
			// Récupère le nombre d'images à afficher
			if (isset($_GET["nbImg"])) {
				$nbImg = $_GET["nbImg"];
			} else {
				# sinon débute avec 2 images
				$nbImg = 1;
			}
			// Récupère la categorie à afficher
			if (isset($_GET["categorie"])) {
				$categorie = $_GET["categorie"];
			} else {
				# sinon débute avec 2 images
				$categorie = NULL;
			}
			$data = new data();
		}
		
		//////////////////////// LISTE DES ACTIONS DE CE CONTROLEUR/////////////////////////////
		
		/**
		 * initialisation du controleur
		 */
		function index(){
			$this->first();
		}
		
		/**
		 *initialisation de la page
		 */
		function configureSlideShow(){
			global $imgId,$size,$nbImg,$data,$categorie;
			
			
			// Pre-calcule la première image
			$newImg = $this->getImageDAO()->getImage(1);
			$randomImg = $this->getImageDAO()->getRandomImage();
			$randomImgId = $randomImg->getId();
			
			
			// pre-calcul de l'image précedente
			$prevImg = $this->getImageDAO()->getPrevImage($this->getImageDAO()->getImage($imgId))->getId();
			// pre-calcul de l'image suivante
			$nextImg = $this->getImageDAO()->getNextImage($this->getImageDAO()->getImage($imgId))->getId();
			
			# Mise en place des outils
			# Change l'etat pour indiquer que cette image est la nouvelle
			$newImgId=$newImg->getId(); 
			$newSize=480;
			$newNbImg=1;
			$data->tools['Prev']="index.php?controller=photoMatrix&action=prec&imgId=$prevImg&size=$size&nbImg=$nbImg&categorie=$categorie";
			$data->tools['First']="index.php?controller=photoMatrix&action=first&imgId=$newImgId&size=$newSize&nbImg=$nbImg&categorie=$categorie";
			# Pre-calcule une image au hasard
			$data->tools['Random']="index.php?controller=photoMatrix&action=random&imgId=$randomImgId&size=$size&nbImg=$nbImg&categorie=$categorie";
			# Pour afficher plus d'image passe à une autre page
			if($categorie!=null && $nbImg==$this->getImageDAO()->getNbImageCategory($categorie)){
							$data->styles["#More"]["display"]= "none";
			}else{
				if ($nbImg<127){
					$nbImgMore =$nbImg +1;
				}else{
					$nbImgMore =$nbImg;
				}
				$data->tools['More']="index.php?controller=photoMatrix&action=more&imgId=$imgId&size=$size&nbImg=$nbImgMore&categorie=$categorie";
			}
			# Pour afficher moins d'image passe à une autre page
			if ($nbImg>2){
				$nbImgLess=$nbImg-1;
				$data->tools['Less']="index.php?controller=photoMatrix&action=less&imgId=$imgId&size=$size&nbImg=$nbImgLess&categorie=$categorie";
			}elseif ($nbImg==2){
				$nbImgLess=$nbImg-1;
				$data->tools['Less']="index.php?controller=photo&action=prec&imgId=$imgId&size=&nbImg=$nbImgLess&categorie=$categorie";
			}
			
			// Demande à calculer un zoom sur l'image
			$data->tools['Zoom +']="index.php?controller=photo&action=zoom&imgId=$imgId&size=".($size*1.25)."&categorie=$categorie";
			// Demande à calculer un zoom sur l'image
			$data->tools['Zoom -']="index.php?controller=photo&action=zoom&imgId=$imgId&size=".($size*0.75)."&categorie=$categorie";
			$data->tools['Next']="index.php?controller=photoMatrix&action=next&imgId=$nextImg&size=$size&nbImg=$nbImg&categorie=$categorie";
			
			$data->toolsimg['Prev']="prev.png";
			$data->toolsimg['First']="first.png";
			$data->toolsimg['Random']="random.png";
			$data->toolsimg['More']="add.png";
			$data->toolsimg['Less']="less.png";
			$data->toolsimg['Zoom +']="zoom+.png";
			$data->toolsimg['Zoom -']="zoom-.png";
			$data->toolsimg['Next']="next.png";
			$data->categories = $this->getImageDAO()->getCategories();
			$data->categorie = $categorie;
		}
		
		/**
		 *permet d'ajouter une nouvelle image
		 */
		function first(){
			global $imgId,$size,$nbImg,$data,$categorie;
			$this->getParam();
			$data->content = "view/viewPhotoMatrix.php";
			$data->cssfiles = array("photoMatrix.css");
			$size=480 / sqrt($nbImg);
			// Construit l'image courante
			$list=array();
			$imgId=1;
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			for($i=0;$i<$nbImg;$i++){
				while ($categorieImg!=$categorie && $categorie!=NULL){
					$newImg = $this->getImageDAO()->getNextImage($newImg);
					$categorieImg = $newImg->getCategory();
				}
				$list[$i] = $newImg;
				$newImg = $this->getImageDAO()->getNextImage($newImg);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $list[0]->getId();
			$data->list = $list;
			$data->img = $newImg;
				
			$this->configureSlideShow();
			require_once("view/mainView.php");
		}
		
		/**
		 *permet d'ajouter une nouvelle image
		 */
		function more(){
			global $imgId,$size,$nbImg,$data,$categorie;
			$this->getParam();
			$data->content = "view/viewPhotoMatrix.php";
			$data->cssfiles = array("photoMatrix.css");
			$size=480 / sqrt($nbImg);
			// Construit l'image courante
			$list=array();
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			for($i=0;$i<$nbImg;$i++){
				while ($categorieImg!=$categorie && $categorie!=NULL){
					$newImg = $this->getImageDAO()->getNextImage($newImg);
					$categorieImg = $newImg->getCategory();
				}
				$list[$i] = $newImg;
				$newImg = $this->getImageDAO()->getNextImage($newImg);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $list[0]->getId();
			$data->list = $list;
			$data->img = $newImg;
			
			$this->configureSlideShow();
			require_once("view/mainView.php");	
		}
		
		/**
		 *permet de retirer une image
		 */
		function less(){
			global $imgId,$size,$nbImg,$data,$categorie;
			$this->getParam();
			$data->content = "view/viewPhotoMatrix.php";
			$data->cssfiles = array("photoMatrix.css");
			$size=480 / sqrt($nbImg);
			// Construit l'image courante
			$list=array();
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			for($i=0;$i<$nbImg;$i++){
				while ($categorieImg!=$categorie && $categorie!=NULL){
					$newImg = $this->getImageDAO()->getNextImage($newImg);
					$categorieImg = $newImg->getCategory();
				}
				$list[$i] = $newImg;
				$newImg = $this->getImageDAO()->getNextImage($newImg);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $list[0]->getId();
			$data->list = $list;
			$data->img = $newImg;
			
			$this->configureSlideShow();
			require_once("view/mainView.php");	
		}
		
		/**
		 *permet de mettre les images courantes sur une image aléatoire
		 */
		function random(){
			global $imgId,$size,$nbImg,$data,$categorie;
			$this->getParam();
			$data->content = "view/viewPhotoMatrix.php";
			$data->cssfiles = array("photoMatrix.css");
			$size=480 / sqrt($nbImg);
			// Construit l'image courante
			$list=array();
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			for($i=0;$i<$nbImg;$i++){
				$random = rand(0,1) ;
				if ($random==0){
					while ($categorieImg!=$categorie && $categorie!=NULL){
						$newImg = $this->getImageDAO()->getPrevImage($newImg);
						$categorieImg = $newImg->getCategory();
					}
				}else{
					while ($categorieImg!=$categorie && $categorie!=NULL){
						$newImg = $this->getImageDAO()->getNextImage($newImg);
						$categorieImg = $newImg->getCategory();
					}
				}
				$list[$i] = $newImg;
				$newImg = $this->getImageDAO()->getRandomImage();
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $list[0]->getId();
			$data->list = $list;
			$data->img = $newImg;
			
			$this->configureSlideShow();
			require_once("view/mainView.php");	
		}

		/**
		 *permet de mettre les images courante sur les images precedentes
		 */
		function prec(){
			global $imgId,$size,$nbImg,$data,$categorie;
			$this->getParam();
			$data->content = "view/viewPhotoMatrix.php";
			$data->cssfiles = array("photoMatrix.css");
			$size=480 / sqrt($nbImg);
			// Construit l'image courante
			$list=array();
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			for($i=0;$i<$nbImg;$i++){
				while ($categorieImg!=$categorie && $categorie!=NULL){
					$newImg = $this->getImageDAO()->getPrevImage($newImg);
					$categorieImg = $newImg->getCategory();
				}
				$list[$i] = $newImg;
				$newImg = $this->getImageDAO()->getPrevImage($newImg);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $list[0]->getId();
			$data->list = $list;
			$data->img = $newImg;
				
			$this->configureSlideShow();
			require_once("view/mainView.php");
		
		}
		
		/**
		 *permet de mettre les images courante sur les images suivantes
		 */
		function next(){
			global $imgId,$size,$nbImg,$data,$categorie;
			$this->getParam();
			$data->content = "view/viewPhotoMatrix.php";
			$data->cssfiles = array("photoMatrix.css");
			$size=480 / sqrt($nbImg);
			// Construit l'image courante
			$list=array();
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			for($i=0;$i<$nbImg;$i++){
				while ($categorieImg!=$categorie && $categorie!=NULL){
					$newImg = $this->getImageDAO()->getNextImage($newImg);
					$categorieImg = $newImg->getCategory();
				}
				$list[$i] = $newImg;
				$newImg = $this->getImageDAO()->getNextImage($newImg);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $list[0]->getId();
			$data->list = $list;
			$data->img = $newImg;
			
			$this->configureSlideShow();
			require_once("view/mainView.php");	
		
		}
		
		/**
		 *permet de zoomer sur l'image courante
		 */
		function zoom(){
			$this->next();
		}
		
		/**
		 * return ImageDAO
		 */
		function getImageDAO(){
			return $this->imageDAO;
		}
		
		/**
		 *permet de filtrer les photos selon la categorie sélectionné
		 */
		function filterPhotoMatrix(){
			global $imgId,$size,$data,$nbImg,$categorie;
			$this->getParam();
			$data->content = "viewPhotoMatrix.php";
			$data->cssfiles = array("photoMatrix.css");
			$categorie = $_POST["category"];
			$list=array();
			$imgId = 1;
			$newImg = $this->getImageDAO()->getImage($imgId);
			$categorieImg = $newImg->getCategory();
			for($i=0;$i<$nbImg;$i++){
				while ($categorieImg!=$categorie && $newImg->getId()<=$this->getImageDAO()->count() && $categorie!=null){
					$newImg = $this->getImageDAO()->getImage($newImg->getId()+1);
					$categorieImg = $newImg->getCategory();
				}
				$list[$i] = $newImg;
				$newImg = $this->getImageDAO()->getImage($newImg->getId()+1);
				$categorieImg = $newImg->getCategory();
			}
			// Construit l'image courante
			$imgId = $list[0]->getId();
			$data->list = $list;
			$data->img = $newImg;
			$this->configureSlideShow();
			require_once("view/mainView.php");
		}
				
	}	
?>